import java.util.*;


//tag-Value pairs; can serialize to packet or de-serialize from packet.
class TaggedValue {
	String tag;
	String value;
	public TaggedValue(String tag, String value){
	    this.tag = tag;
	    this.value = value;
	}
	
}
public class Msg {
	public LinkedList<TaggedValue> data = new LinkedList<TaggedValue>(); //tag-value pairs. Tag is not unique which is why map is not good here.
	
	public void clear() {
	    data.clear();
	}
	
	public String toString(){
	    String s = new String();
	    for(TaggedValue tv : data){
		s += tv.tag + "=" + tv.value + "|";	    
	    }
	    return s.substring(0,s.length()-1); //remove last |
	}
	public void fromString(String s) {
	    data.clear();
	    String[] fields = s.split("\\|");
	    for(String f : fields ){
		String[] tv = f.split("=");
		if( tv.length >=2 )
		    data.addLast(new TaggedValue(tv[0], tv[1]));
	    }
	}
	public void add(String tag, String value){
	    data.add(new TaggedValue(tag,value));
	}
	public void add(String tag, int value){
	    data.add(new TaggedValue(tag,Integer.toString(value)));
	}
	public void add(String tag, boolean value){
	    data.add(new TaggedValue(tag,Boolean.toString(value)));
	}
	public void add(String tag, Date time) {
	    data.add(new TaggedValue(tag,Util.dateFormat.format(time)));
	}
	
	String getValue(String tag){
	    for(TaggedValue tv : data){
		if( tv.tag.equals(tag)) {
		    return tv.value;
		}
	    }
	    return null;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
	    Msg msg = new Msg();
	    msg.fromString("Request=requestCS|ReadOnly=true|ItemID=111");
	    String s = msg.toString();
	    Util.println(s);
	}


}
